在 RAG 系統中,找到「語意最接近的知識片段」是核心,然而昨日文章有提到,要做語意檢索,其實是需要先做embedding,讓資料變成是向量,而要正確找到資訊還需要以向量做為索引來高維度向量檢索,而如何達到高速檢索,就是 向量資料庫重要之處。
與傳統關聯式資料庫(RDBMS)不同,向量資料庫專門設計用來處理 高維度向量檢索,支援相似度搜尋、Metadata 過濾,以及針對語言模型優化的索引機制。
項目 | 一般資料庫 | 向量資料庫 |
---|---|---|
資料結構 | 表格(Rows / Columns) | 高維向量(向量空間) |
查詢方式 | SQL、條件篩選 | 相似度搜尋(cosine / dot product / L2) |
適用場景 | CRUD 操作、交易 | 語意檢索、推薦系統、RAG |
延展性 | 資料量級 → TB | 向量數量 → 億級(需高效索引) |
在挑選向量資料庫時,可以透過以下幾個維度來衡量:
因為我們的目的是要做地端部署,因此也要檢查是否是用於本地
向量庫 | 是否本地部署 | 查詢效率 | Metadata 查詢 | LangChain 支援 | 權限機制 |
---|---|---|---|---|---|
FAISS | ✅ 完整本地 | ⚡ 快速(記憶體型) | ❌ 需自行處理 | ✅ 可 | ❌ 須自行設計 |
Qdrant | ✅ Docker / 本地 server | ⚡ 高效 | ✅ 原生支援 filter | ✅ 可 | ✅ tag & namespace 管控 |
Weaviate | ✅ 可私有化(Docker) | ⚡ 高效 | ✅ Graph-like filter | ✅ 可 | ❌ 須自行設計 |
Milvus / Zilliz | ✅ 本地 or Zilliz Cloud | ⚡⚡ 極快(大規模適合) | ✅ 支援 filter | ✅ 可 | ❌ 須自行設計 |
Pinecone | ❌ 僅雲端 | ⚡ 高效 | ✅ 支援 | ✅ 可 | ✅(企業版) |
ChromaDB | ✅ 支援 | ⚠️ 較差 | ✅ 支援 filter | ✅ 可 | ❌ 須自行設計 |
在向量資料庫中,相似度檢索的核心是如何在「高維度空間」中找到與查詢最接近的向量。
大部分資料庫會採用 ANN (Approximate Nearest Neighbor) 技術,以在「速度」與「精確度」之間取得平衡。
因我們的需求是地端佈署,所以筆者整理幾個支援地端的向量庫資料供參考如下表:
向量資料庫 | 檢索方式 / 演算法 | 特點 |
---|---|---|
FAISS | IVF, HNSW, PQ(Product Quantization), Flat(精確搜尋) | Facebook AI 開發,支援 GPU,速度快但功能相對單純。 |
Qdrant | HNSW (Hierarchical Navigable Small World Graph) | 目前最常用的 ANN 方法之一,檢索速度快、精度高,支援 filtering + payload,適合企業級應用。 |
Weaviate | HNSW 為核心 | 支援 Graph-like 查詢與多模態(文字、圖片等)檢索。 |
ChromaDB | 預設 HNSW | 簡單易用,適合小型或原型專案,但效能有限。 |
筆者自己是以ChromaDB和Qdrant作為開發,兩個資料庫都有以下幾項優點:
Qdrant
class 已內建)👉 對於企業級 RAG 系統,Qdrant 在 效能、靈活性、擴展性 上都是目前最平衡的選擇,ChromaDB則是對於小型專案可以快速開發,我們在這周實作先使用ChromaDB來實作,後面進階版本則會使用Qdrant,到時候可以一起比較一下兩者差異。